/**
 * 
 */
package net.sisgac.atencion_cliente.service;


import java.util.Date;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;


import net.sisgac.atencion_cliente.model.Destinatario;
import net.sisgac.atencion_cliente.model.SolicitudServicio;
import net.sisgac.atencion_cliente.model.dao.DestinatarioDAO;
import net.sisgac.atencion_cliente.model.dao.SolicitudServicioDAO;
import net.sisgac.atencion_cliente.model.dao.jpa.*;
import net.sisgac.cliente.model.Cliente;
import net.sisgac.cliente.model.dao.ClienteDAO;


/**
 * @author SparKLes
 *
 */
public class AtencionClienteServiceImpl implements AtencionClienteService {

	private final String UNIDAD_DE_PERSISTENCIA ="jpaPersistence";
	private EntityManager em;
	private EntityManagerFactory fabrica;
	private SolicitudServicioDAO solicitudDAO;
	private DestinatarioDAO destinatarioDAO;
	private ClienteDAO clienteDAO;

	

	public AtencionClienteServiceImpl(){
		 em =	this.getEntityManager();
		solicitudDAO=new JPASolicitudServicioDAO(em);
		destinatarioDAO=new JPADestinatarioDAO(em);
	}
	public EntityManager getEntityManager(){

		if(fabrica==null)
			fabrica = Persistence.createEntityManagerFactory(UNIDAD_DE_PERSISTENCIA);
		
		return fabrica.createEntityManager();
		
	}
	@Override
	public SolicitudServicio buscar_SolicitudxCodigo(int id) {
		return null;
		// TODO Auto-generated method stub
		
	
	}
	
	


	@Override
	public void registrarSolicitud(SolicitudServicio o) {
		// TODO Auto-generated method stub
		
		EntityTransaction  tx= em.getTransaction();
		try{
			tx.begin();
			int codigoSolicitud = getMaxOrden();
			String nombreDestinatario=o.getDestinatario().getNombreDestinatario();
			Destinatario destinatario=destinatarioDAO.findById(o.getDestinatario().getIdDestinatario());
			String direccionDestinatario=o.getDestinatario().getDireccionDestinatario();
			
			o.getDestinatario().setNombreDestinatario(nombreDestinatario);
			o.setDestinatario(destinatario);
			o.getDestinatario().setDireccionDestinatario(direccionDestinatario);
			
			String origenSolicitud=o.getOrigenSolicitudS();
			String destinoSolicitud=o.getDestinatario().getDepartamentoDestinatario();
			Date fecha=o.getFechaSolicitudS();
			
			String producto=o.getMercaderia().getNombreProducto();
			
			
			o.setOrigenSolicitudS(origenSolicitud);
			o.getDestinatario().setDepartamentoDestinatario(destinoSolicitud);
			o.setFechaSolicitudS(fecha);
			
			o.getMercaderia().setNombreProducto(producto);
			o.setEstadoSolicitudS("Pendiente");
			o.setIdSolicitudServicio(codigoSolicitud);
			solicitudDAO.insert(o);
			tx.commit();
		}catch(Exception ex){
			tx.rollback();
			throw new RuntimeException(ex);
		}
		
		
	}
	private int getMaxOrden(){
		List<SolicitudServicio> solicitudes=solicitudDAO.findAll();
		Integer maxCode=solicitudes.size()+1;
		return maxCode;
	}

	

}
